package cn.kgc.tangcco.dao;

import cn.kgc.tangcco.pojo.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**
 * @author 李昊哲
 * @Description
 * @create 2021/1/12 9:26
 * JpaRepository<T ,ID> T操作实体类泛型 ID实体类中主键属性的泛型
 * JpaSpecificationExecutor<T> T操作实体类泛型
 */
public interface StudentDao extends JpaRepository<Student, Integer>, JpaSpecificationExecutor<Student> {
    /**
     * 根据ID查找学生信息
     *
     * @param id 学生id
     * @return 学生信息
     */
    @Query("from Student where id = ?1")
    public Student selectOne(Integer id);

    /**
     * 按照名字模糊查找
     *
     * @param firstName 学生模糊姓名
     * @return 模糊姓名查找返回的学生列表
     */
    @Query(value = "from Student where firstName like ?1 or lastName like ?2")
    public List<Student> findStudentLikeName(String firstName, String lastName);

    /**
     * 更新数据
     *
     * @param id        更新条件
     * @param firstName 曾用名
     * @param lastName  现用名
     * @param idCard    身份证
     * @param mobile    手机号
     * @param authText  密码，des加密后的字符串
     * @param cid       所在班级编号
     */
    @Modifying
    @Query(value = "update Student set firstName = ?2,lastName = ?3, idCard = ?4, mobile = ?5, authText = ?6,cid = ?7 where id = ?1")
    public int update(Integer id, String firstName, String lastName, String idCard, String mobile, String authText, Integer cid);

    /**
     * 再删除之前
     * @param cid
     * @return
     */
    @Modifying
    @Query(value = "update Student set cid = 0 where cid = ?1")
    public int nativUpdate(Integer cid);

    /**
     * 使用原生SQL模糊查找某班级的学生信息列表
     *
     * @param cid       班级编号
     * @param firstName 曾用名
     * @param lastName  现用名
     * @return 模糊查找某班级的学生信息列表
     */
    @Query(value = "SELECT * FROM `student` WHERE cid = ?1 AND (first_name like ?2 OR last_name like ?3)", nativeQuery = true)
    public List<Student> nativeQuery(Integer cid, String firstName, String lastName);

}
